package com.mars.admin.modules.post.service;

import com.mars.admin.modules.base.service.BaseService;
import com.mars.admin.modules.post.entity.PostCommentLike;
import com.mybatisflex.core.paginate.Page;

import java.util.List;

/**
 * 帖子评论点赞服务接口
 *
 * @author Mars
 * @version 1.0
 * @date 2025-01-07
 */
public interface IPostCommentLikeService extends BaseService<PostCommentLike> {

    /**
     * 点赞评论
     *
     * @param commentId 评论ID
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean likeComment(Long commentId, Long userId);

    /**
     * 取消点赞评论
     *
     * @param commentId 评论ID
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean unlikeComment(Long commentId, Long userId);

    /**
     * 检查用户是否对评论点赞
     *
     * @param commentId 评论ID
     * @param userId 用户ID
     * @return 是否点赞
     */
    boolean isLiked(Long commentId, Long userId);

    /**
     * 获取用户对评论的点赞记录
     *
     * @param commentId 评论ID
     * @param userId 用户ID
     * @return 点赞记录
     */
    PostCommentLike getUserCommentLike(Long commentId, Long userId);

    /**
     * 查询用户的点赞记录
     *
     * @param userId 用户ID
     * @param page 分页参数
     * @return 点赞记录列表
     */
    Page<PostCommentLike> getUserLikes(Long userId, Page<PostCommentLike> page);

    /**
     * 查询评论的点赞记录
     *
     * @param commentId 评论ID
     * @param page 分页参数
     * @return 点赞记录列表
     */
    Page<PostCommentLike> getCommentLikes(Long commentId, Page<PostCommentLike> page);

    /**
     * 统计评论的点赞数量
     *
     * @param commentId 评论ID
     * @return 点赞数量
     */
    int countCommentLikes(Long commentId);

    /**
     * 统计用户的点赞数量
     *
     * @param userId 用户ID
     * @return 点赞数量
     */
    int countUserLikes(Long userId);

    /**
     * 查询用户点赞的评论ID列表
     *
     * @param userId 用户ID
     * @return 评论ID列表
     */
    List<Long> getUserLikedCommentIds(Long userId);

    /**
     * 查询评论的点赞用户ID列表
     *
     * @param commentId 评论ID
     * @return 用户ID列表
     */
    List<Long> getCommentLikeUserIds(Long commentId);

    /**
     * 根据评论ID删除所有点赞记录
     *
     * @param commentId 评论ID
     * @return 是否成功
     */
    boolean deleteCommentLikes(Long commentId);

    /**
     * 根据用户ID删除所有点赞记录
     *
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean deleteUserLikes(Long userId);
} 